Author |
Message |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Apr 23, 2008 12:44 am (написано за 2 секунды)
Post subject: Dklab_Cache: правильное кэширование — тэги в memcached, namespaces, статистика
|
|
dklab.ru/lib/Dklab_Cache/
|
|
Back to top |
|
 |
Devgru
Guest
Карма: 388 поощрить/наказать
|
Posted: Wed May 07, 2008 2:00 pm (спустя 14 дней 13 часов 16 минут; написано за 4 секунды)
Post subject: вопрос
|
|
Здравствуйте, Дмитрий. Хочу спросить, в классе Dklab_Cache_Backend_MemcachedTag вы используете функцию «tag_delete», которая нигде не определена… Я правильно понял, что нужно использовать «модифицированный» memcached, (code.google.com/p/memcached-tag/) или же нет?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Mon May 12, 2008 1:17 am (спустя 4 дня 11 часов 16 минут; написано за 58 секунд)
Post subject:
|
|
Точнее будет сказать, модифицированный memcached использовать не нужно, потому что он глючный. Прочитайте, пожалуйста, статью внимательно от начала до конца.
|
|
Back to top |
|
 |
symbix
Guest
Карма: 388 поощрить/наказать
|
Posted: Wed May 21, 2008 3:10 am (спустя 9 дней 1 час 53 минуты; написано за 6 минут 1 секунду)
Post subject: хммммм
|
|
1) каким образом гарантируется, что тэги не протухнут раньше тэгируемых? я навскидку вот вижу только два варианта - гарантированно - отдельный memcached для тэгов - на уровне "наверняка верных предположений" - не использовать "маленькие" слабы (тэги, видимо, пойдут в 2^4, возможно, даже в 2^3) больше ни для чего, задрать повыше лайфтайм (если непонятно при чем тут степени двойки - kevinminnick.blogspot.com/2006/01/understanding-memcached-memory.html) 2) для тэгов был бы полезен prolongate patch (продление жизни при гете, управляемое флагом) 3) multi-get не используется? или я не заметил?
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Wed May 21, 2008 3:18 am (спустя 7 минут; написано за 11 секунд)
Post subject:
|
|
от дурак дал ссылку а сам не сверился ;) конечно минимальное 2^6
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed May 21, 2008 10:20 am (спустя 7 часов 2 минуты; написано за 2 минуты 24 секунды)
Post subject:
|
|
Гость wrote: |
каким образом гарантируется, что тэги не протухнут раньше тэгируемых? | Используется алгоритм, который от этого не зависит, рекомендую заглянуть в код. Вкратце: если тэги протухнут раньше, чем тэгированные объекты, то объекты просто также протухнут вместе с этими тэгами, и целостность не нарушится. Но вероятность этого весьма мала, т.к. к тэгам обращение на чтение идет не реже, чем к тэгированным объектам. Соответственно, с точки зрения LRU они имеют одинаковый приоритет вытеснения. [Правда, статья, которую Вы процитировали, вносит некоторые коррективы в это утверждение, однако я не думаю, что очень значительные.]
Last edited by Дмитрий Котеров on Wed May 21, 2008 10:35 am; edited 1 time in total
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed May 21, 2008 10:29 am (спустя 9 минут; написано за 1 минуту 16 секунд)
Post subject:
|
|
symbix wrote: |
для тэгов был бы полезен prolongate patch (продление жизни при гете, управляемое флагом) | А вот насчет этого можно чуть подробнее? Разве в LRU и так не подразумевается, что при каждом чтении вероятность вытеснения снижается? symbix wrote: |
multi-get не используется? или я не заметил? | Не используется, хотя очень бы хотелось: это здорово ускорило бы работу. К сожалению, в расширении PHP memcache он не поддерживается пока: ru2.php.net/manual/en/book.memcache.php
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed May 21, 2008 10:40 am (спустя 10 минут; написано за 1 минуту 46 секунд)
Post subject:
|
|
Кстати говоря, про отдельный memcached для тэгов мысли были. В одной из следующих версий это, вероятно, появится (тем более что реализовать совсем просто, не выходя за рамки идеологии). Но мне думается, что это не даст существенного эффекта все же. По хорошему, надо пробовать так и так на реальном нагруженном проекте, а потом сравнивать число запросов за день, которое прошло мимо кэша.
|
|
Back to top |
|
 |
symbix
Guest
Карма: 388 поощрить/наказать
|
Posted: Sun May 25, 2008 5:24 am (спустя 3 дня 18 часов 44 минуты; написано за 7 минут 55 секунд)
Post subject:
|
|
Quote: |
Вкратце: если тэги протухнут раньше, чем тэгированные объекты, то объекты просто также протухнут вместе с этими тэгами, и целостность не нарушится. Но вероятность этого весьма мала, т.к. к тэгам обращение на чтение идет не реже, чем к тэгированным объектам. Соответственно, с точки зрения LRU они имеют одинаковый приоритет вытеснения. [Правда, статья, которую Вы процитировали, вносит некоторые коррективы в это утверждение, однако я не думаю, что очень значительные.] | вообще, вносит. я использую схожий подход для разбиения длинных списков на связанные "чанки" и сталкивался с вытеснением при тестировании, решил тем, что "задрал" лайфтайм для "маркеров" и поставил на них прологнейт вне зависимости от пролонгейта самих данных. собственно, prolongate. Патч увеличивает лайфтайм при get-е, если взведен 3-й бит флага. Таким образом логика меняется с "протухнуть через N секунд после set-а" на "протухнуть через N секунд после последнего set-а или get-а", что позволяет эффективно кэшировать "горячие" данные. Изменения примитивные: symbi.org/misc/memcached-1.2.2-autoprolongate.patch - конечно, нарушается изначальный принцип "флаги ни на что не влияют", но это последнее что меня тут волнует ;) Quote: |
Не используется, хотя очень бы хотелось: это здорово ускорило бы работу. К сожалению, в расширении PHP memcache он не поддерживается пока: | Поддерживается. php.net/memcache_get Quote: |
You can pass array of keys to Memcache::get() to get array of values. The result array will contain only found key-value pairs |
|
|
Back to top |
|
 |
Guest
Карма: 388 поощрить/наказать
|
Posted: Sun May 25, 2008 5:46 am (спустя 21 минуту; написано за 2 минуты 23 секунды)
Post subject:
|
|
Quote: |
По хорошему, надо пробовать так и так на реальном нагруженном проекте, а потом сравнивать число запросов за день, которое прошло мимо кэша. | Вот, кстати, тоже интересный вопрос, как это считать. Если общее число запросто вытягивается из stats, то детализацию по группам ключей - хм... я не придумал ничего лучше чем грубо впихнуть error_log в свой memcache-враппер и потом все это дело с вебов агрегировать-парсить. Вариант запустить memcached в debug-режиме на продакшене и грепать логи отмел сразу как полный @эпитет@...
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sun Jun 15, 2008 10:28 pm (спустя 21 день 16 часов 42 минуты; написано за 1 минуту 33 секунды)
Post subject:
|
|
Гость wrote: |
Таким образом логика меняется с "протухнуть через N секунд после set-а" на "протухнуть через N секунд после последнего set-а или get-а" | Хм. Очень интересный патч. Но скажите, если я ставлю число секунд равным бесконечности (для тагов), имеет ли смысл данный патч вообще? Судя по коду, не должен бы... symbix wrote: |
Поддерживается. php.net/memcache_get | Спасибо. Вот это очень ценная информация! В скором времени проапдейчу библиотеку.
|
|
Back to top |
|
 |
Ivan1986
Участник форума
Warnings: 2
Joined: 09 Oct 2007
Posts: 807
Карма: 38 поощрить/наказать
|
Posted: Wed Jun 18, 2008 3:03 pm (спустя 2 дня 16 часов 35 минут; написано за 2 минуты)
Post subject:
|
|
Еще бы хорошо добавить такую функцию добавить в библиотеку - слоты это конечно хорошо, но черезчур ООП это иногда не есть хорошо Code (php): | скопировать код в буфер обмена | class Cache_Thru { private $_cacher, $_obj, $_id, $_tags, $_lt; public function __construct($Cacher, $obj, $id, $tags, $lifeTime) { $this->_cacher = $Cacher; $this->_obj = $obj; $this->_id = $id; $this->_tags = $tags; $this->_lt = $lifeTime; } public function __call($method, $args) { if (false === ($result = $this->_cacher->load($this->_id))) { $result = call_user_func_array (www.php.net/call_user_func_array)($this->_obj?array (www.php.net/array)($this->_obj, $method):$method, $args); $this->_cacher->save($result, $this->_id, $this->_tags, $this->_lt); } return $result; } }
function thru($Cacher, $obj, $id, $tags=array (www.php.net/array)(), $lifeTime=null) { return new Cache_Thru($Cacher, $obj, $id, $tags, $lifeTime); } |
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Tue Jun 24, 2008 1:51 am (спустя 5 дней 10 часов 47 минут; написано за 1 минуту 16 секунд)
Post subject:
|
|
Э-эээ... ну вы явно передаете id слота, насколько я понимаю, а это есть большое зло (как указано в статье). Потому что логика формирования этого ID оказывается размазанной по коду. Идеология слотов как раз призвана бороться с таким размазыванием, чтобы все возможные слоты были всегда под рукой.
|
|
Back to top |
|
 |
Ivan1986
Участник форума
Warnings: 2
Joined: 09 Oct 2007
Posts: 807
Карма: 38 поощрить/наказать
|
Posted: Tue Jun 24, 2008 8:03 pm (спустя 18 часов 12 минут; написано за 2 минуты 59 секунд)
Post subject:
|
|
Да, я явно передаю id и теги, мое мнение что нужно сделать возможность использования обоих вариантов. Так как php не компилируемый язык, то включение огромного числа мелких файлов - а такими у вас являются все файлы, описывающие теги и слоты сильно повлияет на производительность, особенно в случае отсутствия кеширования байткода (оно есть не везде), по крайне мере возможность ИМХО добавить нужно.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sat Jul 05, 2008 11:54 am (спустя 10 дней 15 часов 50 минут; написано за 49 секунд)
Post subject:
|
|
Ivan1986 wrote: |
ильно повлияет на производительность | Замеры - в студию. Ivan1986 wrote: |
особенно в случае отсутствия кеширования байткода | Конечно! Особенно это актуально, если виртуальная машина PHP реализована на Прологе внутри БЭСМ-6.
|
|
Back to top |
|
 |
Ivan1986
Участник форума
Warnings: 2
Joined: 09 Oct 2007
Posts: 807
Карма: 38 поощрить/наказать
|
Posted: Wed Jul 09, 2008 11:08 am (спустя 3 дня 23 часа 14 минут; написано за 1 минуту 17 секунд)
Post subject:
|
|
Дмитрий Котеров wrote: |
Замеры - в студию. | Ну фактически у вас в 49 набле - Подключение всех файлов по одному, eAccelerator выключен: 911 мс. Включение одного большого слитого файла, eAccelerator выключен: 458 мс. На виртуальном хостинге может и не быть акселератора, и никто не разрешит поставить...
|
|
Back to top |
|
 |
Миша Спларов
Участник форума

Joined: 17 Nov 2003
Posts: 821
Карма: 65 поощрить/наказать
Location: Россия, Москва
|
Posted: Wed Jul 09, 2008 11:32 am (спустя 24 минуты; написано за 1 минуту 44 секунды)
Post subject:
|
|
Ivan1986 wrote: |
На виртуальном хостинге может и не быть акселератора, и никто не разрешит поставить... | Проекту на виртуальном хостинге и не критичен акселератор, и не для таких проектов делаются описанные в набле приёмы.
|
|
Back to top |
|
 |
Ivan1986
Участник форума
Warnings: 2
Joined: 09 Oct 2007
Posts: 807
Карма: 38 поощрить/наказать
|
Posted: Wed Jul 09, 2008 2:26 pm (спустя 2 часа 53 минуты; написано за 38 секунд)
Post subject:
|
|
ну в принципе да, не спорю... Однако насчет опционально почему бы не добавить...
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Tue Aug 19, 2008 2:46 am (спустя 1 месяц 9 дней 12 часов 20 минут; написано за 6 минут 24 секунды)
Post subject:
|
|
Доступна бета-версия с multi-get оптимизацией: dklab.ru/wsvn/lib/Dklab_Cache/trunk/
Хотя все тесты проходят (и написаны дополнительные), в официальный релиз пока не выкладываю. Протестируйте, пожалуйста, кому актуально, и напишите сюда результаты. Как работать
Используйте везде вместо Zend_Cache_Backend_Memcached расширенный класс Dklab_Cache_Backend_MemcachedMultiload, тогда поддержка multi-get включется и будет автоматически доступна для TagEmuWrapper: Code (php): | скопировать код в буфер обмена | $memcached = new Dklab_Cache_Backend_MemcachedMultiload($memcachedOptions); $backend = new Dklab_Cache_Backend_TagEmuWrapper($memcached); ... работаем с тагами в $backend, оптимизация включена ... | (Конечно, можно продолжать использовать и Zend_Cache_Backend_Memcached, но тогда multi-get выключится, все остальное же работает, как раньше.) Результаты
Запросы без оптимизации (1 ключ, 4 тага): Incrementor: Dklab_Cache_Backend_Profiler::load Incrementor: Dklab_Cache_Backend_Profiler::load Incrementor: Dklab_Cache_Backend_Profiler::load Incrementor: Dklab_Cache_Backend_Profiler::load Incrementor: Dklab_Cache_Backend_Profiler::load Запросы с включенной оптимизацией (1 ключ, 4 тага): Incrementor: Dklab_Cache_Backend_Profiler::load Incrementor: Dklab_Cache_Backend_Profiler::multiLoad Видно, что 4 разных запроса к 4 тагом превратились в 1 запрос вида multiLoad. К сожалению, меньше 2 запросов при использовании тагов сделать не получится, это теоретический предел.
Last edited by Дмитрий Котеров on Wed Feb 04, 2009 8:19 pm; edited 1 time in total
|
|
Back to top |
|
 |
andry_
Guest
Карма: 388 поощрить/наказать
|
Posted: Thu Nov 20, 2008 10:59 pm (спустя 3 месяца 1 день 20 часов 12 минут; написано за 3 минуты 12 секунд)
Post subject:
|
|
Я что-то не поюму смысла либы по тегированию, она же не может работать. Не проверял, но судя по коду Code (php): | скопировать код в буфер обмена | if (!method_exists (www.php.net/method_exists)($this->_handle, 'tag_add')) { Zend_Cache::throwException('Method tag_add() is not supported by the PHP memcached extension!'); } | так в текущей версии пхп нет такой и когда появиться не понятно. Насколько я знаю даже это патч для мемкеша еще стабильно не работает. Это теоритически размышления или я что-то не правильно понял?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sat Nov 22, 2008 7:32 pm (спустя 1 день 20 часов 33 минуты; написано за 1 минуту 17 секунд)
Post subject:
|
|
Рекомендую прочитать статью от начала и до конца, она небольшая. Библиотека MemcachedTag.php вообще в статье не рассматривается, она в дистрибутиве только в качестве "довеска", на будущее, если вдруг патч про таги появится. Пользоваться надо TagEmuWrapper.php, она работает и даже покрыта тестами.
|
|
Back to top |
|
 |
jurm
Guest
Карма: 388 поощрить/наказать
|
Posted: Fri Jan 23, 2009 12:19 pm (спустя 2 месяца 16 часов 47 минут; написано за 2 минуты 29 секунд)
Post subject:
|
|
Есть следующий вопрос. У вас в листинге 2 происходит такое назначение: Code (php): | скопировать код в буфер обмена | $backend = new Dklab_Cache_Backend_TagEmuWrapper($memcached); $frontend = new Zend_Cache_Frontend_Output(); $frontend->setBackend($backend); | Но в результате попыток сделать подобное выходит ошибка, Catchable fatal error: Argument 1 passed to Zend_Cache_Core::setBackend() must be an instance of Zend_Cache_Backend, instance of Dklab_Cache_Backend_TagEmuWrapper given... В чем подвох? Версия ZF: ZendFramework-1.7.0PR
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Tue Feb 03, 2009 8:58 pm (спустя 11 дней 8 часов 39 минут; написано за 50 секунд)
Post subject:
|
|
Я так понял что вы дальше не поддерживаете эту библиотеку? Где можно получить последнюю версию с оптимизацией количества запросов?
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Feb 04, 2009 5:58 pm (спустя 20 часов 59 минут; написано за 1 минуту 50 секунд)
Post subject:
|
|
jurm
Это несовместимость с новой версией Zend Framework, похоже. Потому что в ней объявление этого метода такое: public function setBackend(Zend_Cache_Backend $backendObject) А было - public function setBackend($backendObject) На самом деле, это полный беспредел, потому что в классе Zend_Cache_Backend завязки за файловую систему и вообще всякий мусор, который в мемкэш-бакенде совершенно не нужен. Куда только катится ZF...
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Feb 04, 2009 6:09 pm (спустя 10 минут; написано за 29 секунд)
Post subject:
|
|
Иван Шумков wrote: |
Dklab_Cache_Backend_MemcachedMultiload | Черт. Потерял я ее, пока в trunc код библиотеки выделял... причем в кэше Гугла она осталась: 209.85.129.132/search?q=cache:f0WHzQLtQXgJ:dklab.ru/wsvn/lib/%3Fop%3Dcomp%26compare%255B%255D%3D%252FDklab_Cache%252Flib%252FDklab%40242%26compare%255B%255D%3D%252FDklab_Cache%252Flib%252FDklab%40249+Dklab_Cache_Backend_MemcachedMultiload&hl=ru&ct=clnk&cd=47&gl=ru&client=firefox-a
Попробую из бэкапа достать.
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Feb 04, 2009 8:20 pm (спустя 2 часа 11 минут; написано за 21 секунду)
Post subject:
|
|
Восстановил, сделал основной версией на сайте. Скачать можно, где обычно: dklab.ru/lib/Dklab_Cache/
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Feb 04, 2009 8:28 pm (спустя 7 минут; написано за 3 минуты 38 секунд)
Post subject:
|
|
Кстати, еще там добавился класс ReplicationWrapper, который позволяет отправлять запросы на запись одновременно в несколько memcached-серверов, а снаружи имеет интерфейс обычного backend-а. Удобно, если проект в нескольких датацентрах и использует тэги, но читать данные хочется только из текущего датацентра, не ходя в другой (кстати, в такой ситуации удобно настраивать репликацию только для функции очистки кэша, а простую запись оставлять нереплицируемой). В последней версии PHP-шного memcache-модуля 3.0.3 (pecl.php.net/package/memcache), кстати, репликация поддерживается на встроенном уровне, однако она уже больше года как бета, и наши тесты показывают, что она рушит-таки PHP иногда (чего не происходит со стабильной 2.2.4). Так что Dklab_Cache_Backend_ReplicationWrapper - реальный выход из ситуации.
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Mon Feb 09, 2009 12:02 pm (спустя 4 дня 15 часов 34 минуты; написано за 16 секунд)
Post subject:
|
|
Бесконечно благодарен!
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Thu Feb 12, 2009 4:39 pm (спустя 3 дня 4 часа 37 минут; написано за 23 секунды)
Post subject:
|
|
Я так понял вы не поправили эту ошибку в новом релизе? Code (php): | скопировать код в буфер обмена | Catchable fatal error: Argument 1 passed to Zend_Cache_Core::setBackend() must be an instance of Zend_Cache_Backend, instance of Dklab_Cache_Backend_TagEmuWrapper given, called in /Users/ivanshumkov/Projects/geometria_old/geometria/library/Zend/Cache.php on line 110 and defined (www.php.net/defined) in /Users/ivanshumkov/Projects/geometria_old/geometria/library/Zend/Cache/Core.php on line 145 |
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Thu Feb 19, 2009 8:24 pm (спустя 7 дней 3 часа 44 минуты; написано за 36 секунд)
Post subject:
|
|
Еще вопрос, как почистить записи по тегу понятно, но возможно ли выбрать все записи по тегу?
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Thu Feb 19, 2009 9:18 pm (спустя 54 минуты; написано за 1 минуту 35 секунд)
Post subject:
|
|
Вот код: Code (php): | скопировать код в буфер обмена | $memcached = new Dklab_Cache_Backend_MemcachedMultiload($backendConfig); $backend = new Dklab_Cache_Backend_TagEmuWrapper($memcached); $cache = Zend_Cache::factory('Core', $backend, $config); Zend_Registry::set('cache', $cache);
$cache = Zend_Registry::get('cache'); $users = new Users; foreach ($users->fetchAll(null,null,10) as $user) { $cache->save($user, "user_$user->id", array (www.php.net/array)('online_users')); } $userSessions = $cache->load('online_users'); $this->view->users = array (www.php.net/array)(); if ($userSessions) { // <--- FALSE Why???? foreach ($userSessions as $session) { //if ($session->sex == $this->_getParam('sex')) { $this->view->users[] = $session; //} } } |
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Thu Feb 19, 2009 10:09 pm (спустя 51 минуту; написано за 1 минуту 25 секунд)
Post subject:
|
|
Очистка по тегу работает: Code (php): | скопировать код в буфер обмена | $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array (www.php.net/array)("online_users"));
$this->view->users = array (www.php.net/array)(); foreach($ids as $id) { if ($id) $this->view->users[] = $cache->load("user_$id"); } |
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Thu Feb 19, 2009 10:48 pm (спустя 39 минут; написано за 1 минуту 20 секунд)
Post subject:
|
|
Разобрал по косточкам вашу библиотеку и понял почему получить список всех тегированных ключей получить пока не возможно.
|
|
Back to top |
|
 |
bæv
Модератор «Дзена»

Joined: 27 Aug 2003
Posts: 7275
Карма: 9986 поощрить/наказать
|
Posted: Fri Feb 20, 2009 12:24 am (спустя 1 час 35 минут; написано за 29 секунд)
Post subject:
|
|
Иван Шумков, Вы в курсе, что собственное сообщение можно редактировать?
|
|
Back to top |
|
 |
Ruscon
Заглянувший
Joined: 20 Feb 2009
Posts: 2
Карма: 0 поощрить/наказать
|
Posted: Fri Feb 20, 2009 3:27 pm (спустя 15 часов 3 минуты; написано за 2 минуты 35 секунд)
Post subject:
|
|
Добрый... Скачал либку, попытался посмотреть примеры. Почти во всех одни и те же ошибки www.home.my/Dklab_Cache/t/Dklab_Cache/Frontend/010_include.phpt --TEST-- Dklab_Cache_Frontend: syntax correctness --FILE-- <!--error--><br /> <b>Fatal error</b>: Uncaught exception 'Zend_Cache_Exception' with message 'The memcache extension must be loaded for using this backend !' in Z:\home\home.my\www\Dklab_Cache\ZendFramework\lib\Zend\Cache.php:141 Stack trace: #0 Z:\home\home.my\www\Dklab_Cache\ZendFramework\lib\Zend\Cache\Backend\Memcached.php(97): Zend_Cache::throwException('The memcache ex...') #1 Z:\home\home.my\www\Dklab_Cache\t\Dklab_Cache\init.php(16): Zend_Cache_Backend_Memcached->__construct(Array) #2 Z:\home\home.my\www\Dklab_Cache\t\Dklab_Cache\Frontend\init.php(2): require_once('Z:\home\home.ca...') #3 Z:\home\home.my\www\Dklab_Cache\t\Dklab_Cache\Frontend\010_include.phpt(6): require('Z:\home\home.ca...') #4 {main} thrown in <b>Z:\home\home.my\www\Dklab_Cache\ZendFramework\lib\Zend\Cache.php</b> on line <b>141</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script> Это мои корявые руки или что-то другое ? =)
|
|
Back to top |
|
 |
Иван Шумков
Участник форума

Joined: 30 Dec 2004
Posts: 229
Карма: 6 поощрить/наказать
Location: Россия, Санкт-Петербург
|
Posted: Fri Feb 20, 2009 5:43 pm (спустя 2 часа 16 минут; написано за 34 секунды)
Post subject:
|
|
Да ваши. Вам необходимо подключить экстеншен memcache к php: Quote: |
The memcache extension must be loaded for using this backend ! |
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Sun Feb 22, 2009 1:14 am (спустя 1 день 7 часов 30 минут; написано за 2 минуты 51 секунду)
Post subject:
|
|
Иван Шумков wrote: |
Catchable fatal error: Argument 1 passed to Zend_Cache_Core::setBackend() must be an instance of Zend_Cache_Backend, instance of Dklab_Cache_Backend_TagEmuWrapper given | Нет, потому что не совсем понятно (по описанным выше причинам), как это вообще можно исправить. Ошибка скорее в архитектуре Zend_Cache_Core. Вы посмотрите, какой там мусор в Zend_Cache_Backend: метод getTmpDir(), _loggerSanity() и т.д. Ну при чем здесь абстракция кэша и "временная директория"? Совсем не хочется эту помойку наследовать в своих классах. И это при том, что есть четкий Zend_Cache_Backend_Interface. Почему они его не используют в этом type hint, для меня загадка. Нужно писать им в багтрак, на самом деле. Иван Шумков wrote: |
как почистить записи по тегу понятно, но возможно ли выбрать все записи по тегу? | Нет, такой функционал не поддерживается, т.к. эта задача выходит за рамки паттерна "кэширование".
|
|
Back to top |
|
 |
ort
Заглянувший
Joined: 20 May 2009
Posts: 1
Карма: 0 поощрить/наказать
|
Posted: Wed May 20, 2009 5:50 pm (спустя 2 месяца 26 дней 16 часов 36 минут; написано за 1 минуту 58 секунд)
Post subject:
|
|
Такой вопрос, для тегов введена поддержка multi-get, а просто для запросов get через бэкенд TagEmuWrapper работают мульти запросы? т.е. (Dklab_Cache_Backend_TagEmuWrapper).load(array('key1','key2')); UPD или я что то путаю? )
|
|
Back to top |
|
 |
Дмитрий Котеров
Администратор

Joined: 10 Mar 2003
Posts: 13665
Карма: 412 поощрить/наказать
|
Posted: Wed Jul 01, 2009 5:24 pm (спустя 1 месяц 10 дней 23 часа 33 минуты; написано за 33 секунды)
Post subject:
|
|
В TagEmuWrapper поддержка multi-get отсутствует. Milti-get реализован только в backend-классе Dklab_Cache_Backend_MemcachedMultiload.
|
|
Back to top |
|
 |
Валенок
Участник форума

Joined: 06 Apr 2006
Posts: 520
Карма: -3 поощрить/наказать
|
Posted: Sat Oct 24, 2009 6:20 pm (спустя 3 месяца 23 дня 56 минут; написано за 30 секунд)
Post subject:
|
|
Попробовал засубмитить им баг framework.zend.com/issues/browse/ZF-8139
Не знаю уж, как они отреагируют :) Спасибо за библиотеку!
|
|
Back to top |
|
 |
|